package conf

import (
	"fmt"
	"github.com/spf13/viper"
	"sync"
	"time"
)

//总配置
type config struct {
	Db     db
	Server server
	Log    log
	Jwt    jwt
}

//数据库配置
type db struct {
	User string // 数据库账号
	Pwd  string // 数据库密码
	Name string // 使用的数据库名称
	Type string // 使用的类型 mysql
	Host string //主机地址 ip:端口
}

//服务器配置
type server struct {
	RunMode      string //运行模式
	Port         int    //运行端口
	ReadTimeout  time.Duration
	WriteTimeout time.Duration
}

//日志
type log struct {
	Level int //  日志等级，越高打出越多
}

// JWT
type jwt struct {
	JwtSecret string // 密钥内容
}

var Config *config

var once sync.Once

//初始化配置文件
func Setup(ops ...Load) {
	once.Do(func() {
		vi := viper.New()
		for _, op := range ops {
			op(vi)
		}
		if err := vi.Unmarshal(&Config); err != nil {
			fmt.Println(err)
		}
	})
}

//需要读取配置到 Viper 对象
type Load func(*viper.Viper)
